En esta ocasión utilizaremos los datos de las estimaciones del ministerio de agroindustria para utilizar todo lo que aprendimos sobre el tidyverse.

library(tidyverse)
estimaciones <- read.table(file = '../datasets/Estimaciones.csv',sep=";", header = TRUE)

Hechamos un rápido vistazo a la base

head(estimaciones)
str(estimaciones)
'data.frame':   95873 obs. of  12 variables:
 $ ID.Provincia       : int  82 6 6 6 6 6 6 6 6 6 ...
 $ Provincia          : Factor w/ 23 levels "BUENOS AIRES",..: 20 1 1 1 1 1 1 1 1 1 ...
 $ ID.Departamento    : int  126 854 854 14 14 14 14 14 14 14 ...
 $ Departamento       : Factor w/ 568 levels "1 DE MAYO","12 DE OCTUBRE",..: 499 4 4 7 7 7 7 7 7 7 ...
 $ Id.Cultivo         : int  0 1 1 1 1 1 1 1 1 1 ...
 $ Cultivo            : Factor w/ 28 levels "","Ajo","Algodón",..: 1 2 2 2 2 2 2 2 2 2 ...
 $ ID.Campaña         : int  41 1 2 1 2 3 4 5 6 7 ...
 $ Campana            : Factor w/ 50 levels "1969/70","1970/71",..: 41 1 2 1 2 3 4 5 6 7 ...
 $ Sup..Sembrada..Ha. : int  0 3 1 15 10 8 8 10 15 15 ...
 $ Sup..Cosechada..Ha.: int  0 3 1 15 10 8 8 10 15 15 ...
 $ Producción..Tn.    : int  0 10 3 82 55 44 69 85 126 81 ...
 $ Rendimiento..Kg.Ha.: int  0 3333 3000 5467 5500 5500 8625 8500 8400 5400 ...
summary(estimaciones)
  ID.Provincia          Provincia     ID.Departamento
 Min.   : 6.00   BUENOS AIRES:35876   Min.   :  0.0  
 1st Qu.: 6.00   SANTA FE    : 6853   1st Qu.: 49.0  
 Median :22.00   CHACO       : 6631   Median :105.0  
 Mean   :32.17   CORDOBA     : 5979   Mean   :207.2  
 3rd Qu.:54.00   ENTRE RIOS  : 4708   3rd Qu.:277.0  
 Max.   :94.00   MISIONES    : 4636   Max.   :882.0  
                 (Other)     :31190                  
     Departamento     Id.Cultivo           Cultivo     
 CAPITAL   : 1499   Min.   : 0.00   Trigo total:11922  
 9 DE JULIO: 1069   1st Qu.:12.00   Sorgo      :10749  
 25 DE MAYO: 1040   Median :22.00   Soja total :10487  
 COLON     :  939   Mean   :19.12   Girasol    : 9638  
 CHACABUCO :  938   3rd Qu.:26.00   Maíz       : 6213  
 SAN PEDRO :  899   Max.   :35.00   Centeno    : 5456  
 (Other)   :89489                   (Other)    :41408  
   ID.Campaña       Campana      Sup..Sembrada..Ha.
 Min.   : 1.00   1979/80: 2865   Min.   :      0   
 1st Qu.: 9.00   1978/79: 2844   1st Qu.:    130   
 Median :19.00   1977/78: 2787   Median :   1200   
 Mean   :21.74   1973/74: 2714   Mean   :  11361   
 3rd Qu.:33.00   1976/77: 2707   3rd Qu.:   7600   
 Max.   :50.00   1980/81: 2698   Max.   :1096100   
                 (Other):79258                     
 Sup..Cosechada..Ha. Producción..Tn.   Rendimiento..Kg.Ha.
 Min.   :      0     Min.   :      0   Min.   :     0     
 1st Qu.:     70     1st Qu.:    177   1st Qu.:  1000     
 Median :    820     Median :   1750   Median :  1829     
 Mean   :  10235     Mean   :  25939   Mean   :  3202     
 3rd Qu.:   6000     3rd Qu.:  13000   3rd Qu.:  3500     
 Max.   :1066100     Max.   :2637503   Max.   :300000     
                                                          

Ejercicio 1: Creación del dataset

La columna cultivo es de tipo factor con 28 niveles. Queremos armar nuestro dataset con solamente 3 cultivos:Soja, Trigo y Maíz

Necesitamos filtrar los datos y renombrar la nueva base con la que vamos a trabajar. Tengan en cuenta que el filtro tiene que estar escrito de la misma manera que se encuentra el registro.

Base <- estimaciones %>% 
  filter(Cultivo == "Soja total" | Cultivo == "Trigo total" | Cultivo == "Maíz")
head(Base)

Ejercicio 2: Modificación de variables

El Rendimiento se encuentra en kg/ha, para una mayor facilidad de lectura queremos modificar la columna a (qq/ha). Luego le cambiaremos el nombre a todas las columnas de medidas para incluir las unidades entre paréntesis.

Base$Rendimiento..Kg.Ha. = Base$Rendimiento..Kg.Ha./100
Base <- Base %>% 
  rename("Rinde(qq/ha)" = Rendimiento..Kg.Ha.,
         "Sembrada(ha)" = Sup..Sembrada..Ha.,
         "Cosechada(ha)" = Sup..Cosechada..Ha.,
         "Produccion(tn)" = Producción..Tn.)
head(Base)

Ejercicio 3: Seleccion de variables y reordenamiento

Reescribir la base con las siguientes columnas y respetando el orden: Provincia, Departamento, Cultivo, Campana, Sembrada(ha), Cosechada(ha), Rinde(qq/ha) y Produccion(tn).

Base <-  Base %>% 
  select(Provincia,Departamento,Cultivo,Campana,
         `Sembrada(ha)`,`Cosechada(ha)`,`Rinde(qq/ha)`,
         `Produccion(tn)`)
head(Base)

Ejercicio 4: Nuevas variables

Calcular el promedio, el máximo y el mínimo del rinde de cada cultivo y provincia. Presentar los datos ordenados según el rinde promedio.

Necesitamos agrupar los casos de acuerdo a su tipo de cultivo y provincia, y calculamos los indicadores agregados solicitados. Luego, ordenamos los resultados.

ejercicio4 <- Base %>% 
  group_by(Provincia, Cultivo) %>% 
  summarise(Rinde_Prom = mean(`Rinde(qq/ha)`),
            Rinde_Max =  max(`Rinde(qq/ha)`),
            Rinde_Min =  min(`Rinde(qq/ha)`)) %>% 
  arrange(Rinde_Prom)
ejercicio4

PLUS: Remover NA´s

No lo vimos en la clase, pero muchas veces en las bases se utilizan 0 u otros valores cuando no deberia haber dato. En ese caso utilizaremos el siguiente código para reemplazarlos por NA´s. data[data == 0] <- NA

*Tip:* Para reemplazar na con 0 realizar el siguiente código: data[is.na(data)] <- 0

Ejercicio 5: Join

Se desea generar un nuevo dataset que incorpore toda la base de datos y que adicionalmente se incorpore el rinde promedio, mínimo y máximo por cultivo y provincia (previamente calculado en el punto anterior).

ejercicio5 <- left_join(Base, ejercicio4, by = c("Provincia", "Cultivo"))
head(ejercicio5)

Ejercicio 6: Case_when con agrupamiento

Generar una nueva variable en el dataset ejercicio2 que contenga una variable que tome valor “ALTO” cuando el rinde supera el valor promedio, “BAJO” cuando no e “IGUAL” cuando sean iguales. Luego se desea conocer cuáles provincias tuvieron un rinde superior al promedio para el cultivo de soja en la campaña 2018/19.

ejercicio6 <- ejercicio5 %>%
  mutate(Comparativo = case_when(`Rinde(qq/ha)` > Rinde_Prom ~ "ALTO",
                                 `Rinde(qq/ha)` > Rinde_Prom ~ "BAJO",
                                 TRUE ~ "IGUAL")) %>%
    filter(Campana == "2018/19" & Comparativo == "ALTO" & Cultivo=="Soja total") %>%
    group_by(Provincia) %>%
  summarise()
ejercicio6

Ejercicio 7: Horizontal a vertical

Presentar los datos del ejercicio5 de forma tal que Rinde(qq/ha), Rinde_Max, Rinde_Min y Rinde_Prom sean valores de una variable llamada indicador, y los valores se encuentren en la variable valor. Luego seleccionar las columnas Provincia, Cultivo, Variable y Valor. Finalmente ordenarlas por Provincia.

Utilizamos gather(), porque queremos transformar los datos de un formato “horizontal” a uno “vertical”.

ejercicio7 <- ejercicio5 %>% gather(., 
                                 key   = Variables,
                                 value = Valores,
                                 c(7,9:11)) %>% 
  select(Provincia,Cultivo,Variables, Valores) %>%
  arrange(Provincia)
ejercicio7
LS0tDQp0aXRsZTogIlRpZHl2ZXJzZSINCm91dHB1dDoNCiAgaHRtbF9kb2N1bWVudDoNCiAgICBkZl9wcmludDogcGFnZWQNCiAgICB0b2M6IHllcw0KICBodG1sX25vdGVib29rOg0KICAgIHRvYzogeWVzDQogICAgdG9jX2Zsb2F0OiB5ZXMNCmRhdGU6ICcnDQpzdWJ0aXRsZTogUHLDg8KhY3RpY2EgR3VpYWRhDQotLS0NCg0KRW4gZXN0YSBvY2FzacOzbiB1dGlsaXphcmVtb3MgbG9zIGRhdG9zIGRlIGxhcyBlc3RpbWFjaW9uZXMgZGVsIG1pbmlzdGVyaW8gZGUgYWdyb2luZHVzdHJpYSBwYXJhIHV0aWxpemFyIHRvZG8gbG8gcXVlIGFwcmVuZGltb3Mgc29icmUgZWwgYHRpZHl2ZXJzZWAuDQoNCmBgYHtyIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0V9DQpsaWJyYXJ5KHRpZHl2ZXJzZSkNCmVzdGltYWNpb25lcyA8LSByZWFkLnRhYmxlKGZpbGUgPSAnLi4vZGF0YXNldHMvRXN0aW1hY2lvbmVzLmNzdicsc2VwPSI7IiwgaGVhZGVyID0gVFJVRSkNCmBgYA0KDQpIZWNoYW1vcyB1biByw6FwaWRvIHZpc3Rhem8gYSBsYSBiYXNlDQoNCmBgYHtyfQ0KaGVhZChlc3RpbWFjaW9uZXMpDQpzdHIoZXN0aW1hY2lvbmVzKQ0Kc3VtbWFyeShlc3RpbWFjaW9uZXMpDQpgYGANCg0KIyMjIEVqZXJjaWNpbyAxOiBDcmVhY2nDs24gZGVsIGRhdGFzZXQNCg0KPiBMYSBjb2x1bW5hICpjdWx0aXZvKiBlcyBkZSB0aXBvIGZhY3RvciBjb24gMjggbml2ZWxlcy4gUXVlcmVtb3MgYXJtYXIgbnVlc3RybyBkYXRhc2V0IGNvbiBzb2xhbWVudGUgMyBjdWx0aXZvczpTb2phLCBUcmlnbyB5IE1hw616DQoNCk5lY2VzaXRhbW9zIGZpbHRyYXIgbG9zIGRhdG9zIHkgcmVub21icmFyIGxhIG51ZXZhIGJhc2UgY29uIGxhIHF1ZSB2YW1vcyBhIHRyYWJhamFyLiBUZW5nYW4gZW4gY3VlbnRhIHF1ZSBlbCBmaWx0cm8gdGllbmUgcXVlIGVzdGFyIGVzY3JpdG8gZGUgbGEgbWlzbWEgbWFuZXJhIHF1ZSBzZSBlbmN1ZW50cmEgZWwgcmVnaXN0cm8uIA0KDQpgYGB7cn0NCkJhc2UgPC0gZXN0aW1hY2lvbmVzICU+JSANCiAgZmlsdGVyKEN1bHRpdm8gPT0gIlNvamEgdG90YWwiIHwgQ3VsdGl2byA9PSAiVHJpZ28gdG90YWwiIHwgQ3VsdGl2byA9PSAiTWHDrXoiKQ0KDQpoZWFkKEJhc2UpDQpgYGANCg0KIyMjIEVqZXJjaWNpbyAyOiBNb2RpZmljYWNpw7NuIGRlIHZhcmlhYmxlcw0KDQo+IEVsIFJlbmRpbWllbnRvIHNlIGVuY3VlbnRyYSBlbiBrZy9oYSwgcGFyYSB1bmEgbWF5b3IgZmFjaWxpZGFkIGRlIGxlY3R1cmEgcXVlcmVtb3MgbW9kaWZpY2FyIGxhIGNvbHVtbmEgYSAqKHFxL2hhKSouIEx1ZWdvIGxlIGNhbWJpYXJlbW9zIGVsIG5vbWJyZSBhIHRvZGFzIGxhcyBjb2x1bW5hcyBkZSBtZWRpZGFzIHBhcmEgaW5jbHVpciBsYXMgdW5pZGFkZXMgZW50cmUgcGFyw6ludGVzaXMuDQoNCg0KYGBge3J9DQpCYXNlJFJlbmRpbWllbnRvLi5LZy5IYS4gPSBCYXNlJFJlbmRpbWllbnRvLi5LZy5IYS4vMTAwDQoNCkJhc2UgPC0gQmFzZSAlPiUgDQogIHJlbmFtZSgiUmluZGUocXEvaGEpIiA9IFJlbmRpbWllbnRvLi5LZy5IYS4sDQogICAgICAgICAiU2VtYnJhZGEoaGEpIiA9IFN1cC4uU2VtYnJhZGEuLkhhLiwNCiAgICAgICAgICJDb3NlY2hhZGEoaGEpIiA9IFN1cC4uQ29zZWNoYWRhLi5IYS4sDQogICAgICAgICAiUHJvZHVjY2lvbih0bikiID0gUHJvZHVjY2nDs24uLlRuLikNCg0KaGVhZChCYXNlKQ0KYGBgDQoNCiMjIyBFamVyY2ljaW8gMzogU2VsZWNjaW9uIGRlIHZhcmlhYmxlcyB5IHJlb3JkZW5hbWllbnRvDQoNCj4gUmVlc2NyaWJpciBsYSBiYXNlIGNvbiBsYXMgc2lndWllbnRlcyBjb2x1bW5hcyB5IHJlc3BldGFuZG8gZWwgb3JkZW46DQpQcm92aW5jaWEsIERlcGFydGFtZW50bywgQ3VsdGl2bywgQ2FtcGFuYSwgU2VtYnJhZGEoaGEpLCBDb3NlY2hhZGEoaGEpLCBSaW5kZShxcS9oYSkgeSBQcm9kdWNjaW9uKHRuKS4NCg0KDQpgYGB7cn0NCkJhc2UgPC0gIEJhc2UgJT4lIA0KICBzZWxlY3QoUHJvdmluY2lhLERlcGFydGFtZW50byxDdWx0aXZvLENhbXBhbmEsDQogICAgICAgICBgU2VtYnJhZGEoaGEpYCxgQ29zZWNoYWRhKGhhKWAsYFJpbmRlKHFxL2hhKWAsDQogICAgICAgICBgUHJvZHVjY2lvbih0bilgKQ0KDQpoZWFkKEJhc2UpDQpgYGANCg0KIyMjIEVqZXJjaWNpbyA0OiBOdWV2YXMgdmFyaWFibGVzDQoNCj4gQ2FsY3VsYXIgZWwgcHJvbWVkaW8sIGVsIG3DoXhpbW8geSBlbCBtw61uaW1vIGRlbCAqcmluZGUqIGRlIGNhZGEgY3VsdGl2byB5IHByb3ZpbmNpYS4gUHJlc2VudGFyIGxvcyBkYXRvcyBvcmRlbmFkb3Mgc2Vnw7puIGVsIHJpbmRlIHByb21lZGlvLg0KDQoNCk5lY2VzaXRhbW9zIGFncnVwYXIgbG9zIGNhc29zIGRlIGFjdWVyZG8gYSBzdSB0aXBvIGRlIGN1bHRpdm8geSBwcm92aW5jaWEsIHkgY2FsY3VsYW1vcyBsb3MgaW5kaWNhZG9yZXMgYWdyZWdhZG9zIHNvbGljaXRhZG9zLiBMdWVnbywgb3JkZW5hbW9zIGxvcyByZXN1bHRhZG9zLg0KDQoNCmBgYHtyfQ0KZWplcmNpY2lvNCA8LSBCYXNlICU+JSANCiAgZ3JvdXBfYnkoUHJvdmluY2lhLCBDdWx0aXZvKSAlPiUgDQogIHN1bW1hcmlzZShSaW5kZV9Qcm9tID0gbWVhbihgUmluZGUocXEvaGEpYCksDQogICAgICAgICAgICBSaW5kZV9NYXggPSAgbWF4KGBSaW5kZShxcS9oYSlgKSwNCiAgICAgICAgICAgIFJpbmRlX01pbiA9ICBtaW4oYFJpbmRlKHFxL2hhKWApKSAlPiUgDQogIGFycmFuZ2UoUmluZGVfUHJvbSkNCg0KDQplamVyY2ljaW80DQpgYGANCiMjIyMgUExVUzogUmVtb3ZlciBOQcK0cw0KTm8gbG8gdmltb3MgZW4gbGEgY2xhc2UsIHBlcm8gbXVjaGFzIHZlY2VzIGVuIGxhcyBiYXNlcyBzZSB1dGlsaXphbiAwIHUgb3Ryb3MgdmFsb3JlcyBjdWFuZG8gbm8gZGViZXJpYSBoYWJlciBkYXRvLiBFbiBlc2UgY2FzbyB1dGlsaXphcmVtb3MgZWwgc2lndWllbnRlIGPDs2RpZ28gcGFyYSByZWVtcGxhemFybG9zIHBvciAqKk5BwrRzKiouDQpkYXRhW2RhdGEgPT0gMF0gPC0gTkENCg0KKlRpcDoqIFBhcmEgcmVlbXBsYXphciBuYSBjb24gMCByZWFsaXphciBlbCBzaWd1aWVudGUgY8OzZGlnbzogZGF0YVtpcy5uYShkYXRhKV0gPC0gMA0KDQoNCiMjIyBFamVyY2ljaW8gNTogSm9pbg0KDQo+IFNlIGRlc2VhIGdlbmVyYXIgdW4gbnVldm8gZGF0YXNldCBxdWUgaW5jb3Jwb3JlIHRvZGEgbGEgYmFzZSBkZSBkYXRvcyB5IHF1ZSBhZGljaW9uYWxtZW50ZSBzZSBpbmNvcnBvcmUgZWwgcmluZGUgcHJvbWVkaW8sIG3DrW5pbW8geSBtw6F4aW1vIHBvciBjdWx0aXZvIHkgcHJvdmluY2lhIChwcmV2aWFtZW50ZSBjYWxjdWxhZG8gZW4gZWwgcHVudG8gYW50ZXJpb3IpLg0KDQoNCmBgYHtyfQ0KZWplcmNpY2lvNSA8LSBsZWZ0X2pvaW4oQmFzZSwgZWplcmNpY2lvNCwgYnkgPSBjKCJQcm92aW5jaWEiLCAiQ3VsdGl2byIpKQ0KDQpoZWFkKGVqZXJjaWNpbzUpDQpgYGANCg0KIyMjIEVqZXJjaWNpbyA2OiBDYXNlX3doZW4gY29uIGFncnVwYW1pZW50bw0KDQo+IEdlbmVyYXIgdW5hIG51ZXZhIHZhcmlhYmxlIGVuIGVsIGRhdGFzZXQgZWplcmNpY2lvMiBxdWUgY29udGVuZ2EgdW5hIHZhcmlhYmxlIHF1ZSB0b21lIHZhbG9yIOKAnEFMVE/igJ0gY3VhbmRvIGVsIHJpbmRlIHN1cGVyYSBlbCB2YWxvciBwcm9tZWRpbywg4oCcQkFKT+KAnSBjdWFuZG8gbm8gZSAiSUdVQUwiIGN1YW5kbyBzZWFuIGlndWFsZXMuIEx1ZWdvIHNlIGRlc2VhIGNvbm9jZXIgY3XDoWxlcyBwcm92aW5jaWFzIHR1dmllcm9uIHVuIHJpbmRlIHN1cGVyaW9yIGFsIHByb21lZGlvIHBhcmEgZWwgY3VsdGl2byBkZSBzb2phIGVuIGxhIGNhbXBhw7FhIDIwMTgvMTkuDQoNCg0KYGBge3J9DQplamVyY2ljaW82IDwtIGVqZXJjaWNpbzUgJT4lDQogIG11dGF0ZShDb21wYXJhdGl2byA9IGNhc2Vfd2hlbihgUmluZGUocXEvaGEpYCA+IFJpbmRlX1Byb20gfiAiQUxUTyIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgUmluZGUocXEvaGEpYCA+IFJpbmRlX1Byb20gfiAiQkFKTyIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUUlVFIH4gIklHVUFMIikpICU+JQ0KICAgIGZpbHRlcihDYW1wYW5hID09ICIyMDE4LzE5IiAmIENvbXBhcmF0aXZvID09ICJBTFRPIiAmIEN1bHRpdm89PSJTb2phIHRvdGFsIikgJT4lDQogICAgZ3JvdXBfYnkoUHJvdmluY2lhKSAlPiUNCiAgc3VtbWFyaXNlKCkNCg0KZWplcmNpY2lvNg0KYGBgDQoNCiMjIyBFamVyY2ljaW8gNzogSG9yaXpvbnRhbCBhIHZlcnRpY2FsDQoNCj4gUHJlc2VudGFyIGxvcyBkYXRvcyBkZWwgZWplcmNpY2lvNSBkZSBmb3JtYSB0YWwgcXVlIFJpbmRlKHFxL2hhKSwgUmluZGVfTWF4LCBSaW5kZV9NaW4geSBSaW5kZV9Qcm9tIHNlYW4gdmFsb3JlcyBkZSB1bmEgdmFyaWFibGUgbGxhbWFkYSBpbmRpY2Fkb3IsIHkgbG9zIHZhbG9yZXMgc2UgZW5jdWVudHJlbiBlbiBsYSB2YXJpYWJsZSB2YWxvci4gTHVlZ28gc2VsZWNjaW9uYXIgbGFzIGNvbHVtbmFzIFByb3ZpbmNpYSwgQ3VsdGl2bywgVmFyaWFibGUgeSBWYWxvci4gRmluYWxtZW50ZSBvcmRlbmFybGFzIHBvciBQcm92aW5jaWEuDQoNClV0aWxpemFtb3MgZ2F0aGVyKCksIHBvcnF1ZSBxdWVyZW1vcyB0cmFuc2Zvcm1hciBsb3MgZGF0b3MgZGUgdW4gZm9ybWF0byDigJxob3Jpem9udGFs4oCdIGEgdW5vIOKAnHZlcnRpY2Fs4oCdLg0KDQpgYGB7cn0NCmVqZXJjaWNpbzcgPC0gZWplcmNpY2lvNSAlPiUgZ2F0aGVyKC4sIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5ICAgPSBWYXJpYWJsZXMsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IFZhbG9yZXMsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjKDcsOToxMSkpICU+JSANCiAgc2VsZWN0KFByb3ZpbmNpYSxDdWx0aXZvLFZhcmlhYmxlcywgVmFsb3JlcykgJT4lDQogIGFycmFuZ2UoUHJvdmluY2lhKQ0KDQplamVyY2ljaW83DQpgYGANCg0KDQoNCg0KDQoNCg0KDQo=